/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.documentar.DAO;

import br.com.documentar.interfacee.InterfaceDAO;
import br.com.documentar.model.AssociarClienteVersaoModel;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Santos
 */
public class AssociarClienteVersaoDAO extends AbstractDAO implements InterfaceDAO<List<AssociarClienteVersaoModel>, AssociarClienteVersaoModel> {

    @Override
    public boolean setDados(AssociarClienteVersaoModel model) {
        ConnectDataBase();
        String sql = null;

        if (model.getVersaoModel().getCodigo() == 0) {
            System.out.println("Versão não cadastrada: " + model.getVersaoModel().getNome() + " do produto: " + model.getVersaoModel().getProduto().getSigla());
            model.setActionScript("I-VersaoNaoCadastrada");
        }

        switch (model.getActionScript()) {
            case "I":
                sql = "INSERT INTO \n"
                        + "  `tlnk_cliente_versao`\n"
                        + "(\n"
                        + "  `TLNK_CLIENTE_FK_PK`,\n"
                        + "  `TLNK_VERSAO_FK_PK`,\n"
                        + "  `TLNK_COLABORADOR_FK`,\n"
                        + "  `TLNK_DATA_ATUALIZACAO`,\n"
                        + "  `TLNK_ATIVA`) \n"
                        + "VALUE (\n"
                        + "  " + model.getClienteModel().getCodigo() + ",\n"
                        + "  " + model.getVersaoModel().getCodigo() + ",\n"
                        + "  " + model.getColaboradorModel().getCodigo() + ",\n"
                        + "  '" + model.getDataAtualizacao() + "',\n"
                        + "  '" + model.getVersaoModel().getAtivo() + "')";
                break;
            case "I-VersaoNaoCadastrada":
                sql = "INSERT INTO \n"
                        + "  `tlnk_cliente_versao_nao_cadastrada`\n"
                        + "(\n"
                        //+ "  `TLNK_CODIGO_PK`,\n"
                        + "  `TLNK_COLABORADOR_FK`,\n"
                        + "  `TLNK_CLIENTE_FK`,\n"
                        + "  `TLNK_NOME`,\n"
                        + "  `TLNK_SIGLA_PRODUTO`,\n"
                        + "  `TLNK_DATA_ATUALIZACAO`,\n"
                        + "  `TLNK_ATIVA`) \n"
                        + "VALUE (\n"
                        //  + "  :TLNK_CODIGO_PK,\n"
                        + "  " + model.getColaboradorModel().getCodigo() + ",\n"
                        + "  " + model.getClienteModel().getCodigo() + ",\n"
                        + "  '" + model.getVersaoModel().getNome() + "',\n"
                        + "  '" + model.getVersaoModel().getProduto().getSigla() + "',\n"
                        + "  '" + model.getDataAtualizacao() + "',\n"
                        + "  '" + model.getVersaoModel().getAtivo() + "')";
                break;
            case "U":
                sql = "UPDATE \n"
                        + "  `tlnk_cliente_versao`  \n"
                        + "SET \n"
                        + "  `TLNK_COLABORADOR_FK` = " + model.getColaboradorModel().getCodigo() + ",\n"
                        + "  `TLNK_DATA_ATUALIZACAO` = '" + model.getDataAtualizacao() + "',\n"
                        + "  `TLNK_ATIVA` = '" + model.getVersaoModel().getAtivo() + "' \n"
                        + "WHERE \n"
                        + "  `TLNK_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + " AND \n"
                        + "  `TLNK_VERSAO_FK_PK` = " + model.getVersaoModel().getCodigo() + "";
                break;
            case "D":
                sql = "DELETE FROM \n"
                        + "  `tlnk_cliente_versao` \n"
                        + "WHERE \n"
                        + "  `TLNK_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + " AND \n"
                        + "  `TLNK_VERSAO_FK_PK` = " + model.getVersaoModel().getCodigo() + "";
                break;
        }
        return InsertUpdateDelete(sql, model.getNomeTela());
    }

    @Override
    public List<AssociarClienteVersaoModel> getDados(AssociarClienteVersaoModel model) {
        model.setResultSet(null);
        model.getListaClienteVersao().clear();
        String sql = "SELECT \n"
                + "  `clienteVersao`.`TLNK_CLIENTE_FK_PK`,\n"
                + "  `cliente`.`TCLI_NOME_RAZAO_SOCIAL`,\n"
                + "  `produto`.`TPRO_CODIGO_PK`, \n"
                + "  `produto`.`TPRO_NOME`,\n"
                + "  `clienteVersao`.`TLNK_VERSAO_FK_PK`,\n"
                + "  `versao`.`TVER_NOME`,\n"
                + "  `clienteVersao`.`TLNK_COLABORADOR_FK`,\n"
                + "  `colaborador`.`TCOL_NOME`,\n"
                + "  `clienteVersao`.`TLNK_DATA_ATUALIZACAO`,\n"
                + "  `clienteVersao`.`TLNK_ATIVA`\n"
                + " FROM \n"
                + "	  `tlnk_cliente_versao` `clienteVersao`\n"
                + "    inner join `tcli_cliente` `cliente`\n"
                + "    on `clienteVersao`.`TLNK_CLIENTE_FK_PK` = `cliente`.`TCLI_CODIGO_PK`  \n"
                + "    inner join `tver_versao` `versao`\n"
                + "    on `clienteVersao`.`TLNK_VERSAO_FK_PK` = `versao`.`TVER_CODIGO_PK`\n"
                + "    inner join `tpro_produto` `produto`\n"
                + "    on `produto`.`TPRO_CODIGO_PK` = `versao`.`TVER_PRODUTO_FK`\n"
                + "    inner join `tcol_colaborador` `colaborador`\n"
                + "    on `clienteVersao`.`TLNK_COLABORADOR_FK` = `colaborador`.`TCOL_CODIGO_PK` ";
        try {
            ConnectDataBase();
            switch (model.getActionScript()) {
                case "C":
                    model.setResultSet(Select(sql, model.getNomeTela()));
                    break;
                case "porClienteVersao":
                    model.setResultSet(Select(sql + " where `clienteVersao`.`TLNK_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + "\n"
                            + " and `clienteVersao`.`TLNK_VERSAO_FK_PK` = " + model.getVersaoModel().getCodigo() + "", model.getNomeTela()));
                    break;
                case "porClienteVersaoAtiva":
                    model.setResultSet(Select(sql + " where `clienteVersao`.`TLNK_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + "\n"
                            + " and `clienteVersao`.`TLNK_ATIVA` = 'S' ", model.getNomeTela()));
                    break;
                case "porCliente":
                    model.setResultSet(Select(sql + " where `clienteVersao`.`TLNK_CLIENTE_FK_PK` = " + model.getClienteModel().getCodigo() + " ", model.getNomeTela()));
                    break;

            }
            while (model.getResultSet().next()) {
                br.com.documentar.model.AssociarClienteVersaoModel p = new br.com.documentar.model.AssociarClienteVersaoModel();
                p.getClienteModel().setCodigo(rs.getInt("TLNK_CLIENTE_FK_PK"));
                p.getClienteModel().setNomeRazao(rs.getString("TCLI_NOME_RAZAO_SOCIAL"));
                p.getVersaoModel().getProduto().setCodigo(rs.getInt("TPRO_CODIGO_PK"));
                p.getVersaoModel().getProduto().setNome(rs.getString("TPRO_NOME"));
                p.getVersaoModel().setCodigo(rs.getInt("TLNK_VERSAO_FK_PK"));
                p.getVersaoModel().setNome(rs.getString("TVER_NOME"));
                p.getColaboradorModel().setCodigo(rs.getInt("TLNK_COLABORADOR_FK"));
                p.getColaboradorModel().setNome(rs.getString("TCOL_NOME"));
                p.setDataAtualizacao(rs.getString("TLNK_DATA_ATUALIZACAO"));
                p.setAtivo(rs.getString("TLNK_ATIVA").charAt(0));
                model.getListaClienteVersao().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            Desconectar(model.getNomeTela());
        }
        return model.getListaClienteVersao();
    }

    /**
     * Metodo responsável por captar os dados no oracle
     *
     * @param model
     * @return
     */
    public List<AssociarClienteVersaoModel> getDadosERP(AssociarClienteVersaoModel model) {
        AbstractDAO teste = new AbstractDAO("Oracle", model.getHostERP(), model.getNomeBancoERP(), model.getPortaERP(), model.getUsuarioERP(), model.getSenhaERP());
        model.setResultSet(null);
        model.getListaClienteVersao().clear();
        String sql = "select (select unidadePai.Tund_Cnpj\n"
                + "          from tund_unidade unidadePai\n"
                + "         where unidadePai.Tund_Unidade_Pk =\n"
                + "               (select min(a.tund_unidade_pk) from tund_unidade a)) CLIENTE,\n"
                + "               controle.tsys_data_versao,\n"
                + "               controle.tsys_produto,\n"
                + "               controle.tsys_numero_versao,\n"
                + "               nvl(controle.tsys_sp,0) tsys_sp,\n"
                + "               nvl(controle.tsys_release, 0) tsys_release,\n"
                + "               controle.tsys_ativa\n"
                + " from tsys_controle controle\n"
                + " order by       controle.tsys_produto,\n"
                + "               controle.tsys_numero_versao,\n"
                + "               controle.tsys_sp,\n"
                + "               controle.tsys_release";

        String sqlNT = "select  (select unidadePai.Tund_Cnpj\n"
                + "            from tund_unidade unidadePai\n"
                + "           where unidadePai.Tund_Unidade_Pk =\n"
                + "                 (select min(a.tund_unidade_pk) from tund_unidade a)) CLIENTE,\n"
                + "         updateC.Tsys_Update_Data,\n"
                + "         updateC.Tsys_Update_Pk ,\n"
                + "         updateC.Tsys_Versao,\n"
                + "         updateC.Tsys_Liberado\n"
                + "    from tsys_update updateC ";

        String sqlNTVerificacao = "select COUNT(*) QTD "
                + " from all_all_tables a "
                + " where a.table_name = 'TSYS_UPDATE'";

        try {
            teste.ConnectDataBase();
            switch (model.getActionScript()) {
                case "C": {
                    model.setResultSet(teste.Select(sql, model.getNomeTela()));
                    break;
                }
            }

            while (teste.rs.next()) {
                br.com.documentar.model.AssociarClienteVersaoModel p = new br.com.documentar.model.AssociarClienteVersaoModel();
                p.getClienteModel().setNumeroDocumento(teste.rs.getString("CLIENTE"));
                p.setDataAtualizacao(teste.rs.getString("tsys_data_versao"));
                p.getVersaoModel().getProduto().setSigla(teste.rs.getString("tsys_produto"));
                p.getVersaoModel().setNome(
                        String.valueOf(teste.rs.getDouble("tsys_numero_versao"))
                        + "." + teste.rs.getString("tsys_sp")
                        + "." + teste.rs.getString("tsys_release"));
                p.getVersaoModel().setAtivo(teste.rs.getString("tsys_ativa").charAt(0));
                model.getListaClienteVersao().add(p);
            }

            /**
             * Processo verificar a existência da segunda tabela de
             * versionamento do software
             */
            int checkTabela = 0;
            switch (model.getActionScript()) {
                case "C": {
                    model.setResultSet(teste.Select(sqlNTVerificacao, model.getNomeTela()));
                    break;
                }
            }

            while (teste.rs.next()) {
                checkTabela = teste.rs.getInt("QTD");
            }

            if (checkTabela > 0) {
                switch (model.getActionScript()) {
                    case "C": {
                        model.setResultSet(teste.Select(sqlNT, model.getNomeTela()));
                        break;
                    }
                }

                while (teste.rs.next()) {
                    br.com.documentar.model.AssociarClienteVersaoModel p = new br.com.documentar.model.AssociarClienteVersaoModel();
                    p.getClienteModel().setNumeroDocumento(teste.rs.getString("CLIENTE"));
                    p.setDataAtualizacao(teste.rs.getString("Tsys_Update_Data"));
                    p.getVersaoModel().getProduto().setSigla(teste.rs.getString("Tsys_Update_Pk"));
                    p.getVersaoModel().setNome(teste.rs.getString("Tsys_Versao"));
                    p.getVersaoModel().setAtivo(teste.rs.getString("Tsys_Liberado").charAt(0));
                    model.getListaClienteVersao().add(p);
                }
            }

        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            teste.Desconectar(model.getNomeTela());
        }
        return model.getListaClienteVersao();

    }

    /**
     * Metodo generico responsável por fazer consultas ao firebird
     *
     * @param model
     * @return
     */
    public List<AssociarClienteVersaoModel> getDadosFrenteLoja(AssociarClienteVersaoModel model) {
        AbstractDAO teste = new AbstractDAO("Firebird", model.getHostFrenteLoja(), model.getNomeBancoFrenteLojaSRV(), model.getPortaFrenteLoja(), model.getUsuarioFrenteLoja(), model.getSenhaFrenteLoja());
        model.setResultSet(null);
        model.getListaClienteVersao().clear();
        String sql = "select  controle.tsys_data_versao,\n"
                + "           controle.tsys_produto,\n"
                + "           controle.tsys_numero_versao,\n"
                + "           COALESCE(controle.tsys_sp ,0) tsys_sp,\n"
                + "           COALESCE(controle.tsys_release,0) tsys_release,\n"
                + "           controle.tsys_ativa \n"
                + "   from tsys_controle controle\n"
                + "   order by  controle.tsys_produto,\n"
                + "             controle.tsys_numero_versao,\n"
                + "             controle.tsys_sp,\n"
                + "             controle.tsys_release ";
        try {
            teste.ConnectDataBase();
            switch (model.getActionScript()) {
                case "C": {
                    model.setResultSet(teste.Select(sql, model.getNomeTela()));
                    break;
                }
            }
            while (teste.rs.next()) {
                br.com.documentar.model.AssociarClienteVersaoModel p = new br.com.documentar.model.AssociarClienteVersaoModel();
                p.setDataAtualizacao(teste.rs.getString("tsys_data_versao"));
                p.getVersaoModel().getProduto().setSigla(teste.rs.getString("tsys_produto"));
                p.getVersaoModel().setNome(
                        String.valueOf(teste.rs.getDouble("tsys_numero_versao"))
                        + "." + teste.rs.getString("tsys_sp")
                        + "." + teste.rs.getString("tsys_release"));
                p.getVersaoModel().setAtivo(teste.rs.getString("tsys_ativa").charAt(0));
                model.getListaClienteVersao().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            teste.Desconectar(model.getNomeTela());
        }
        return model.getListaClienteVersao();
    }
}
